/**
 * 定义用户管理相关接口函数
 */
import request from '@/utils/request'
// 引入管理员相关的接口类型
import type {UserInfoModel, UserInfoListModel, UserPageListModel} from '@/api/acl/model/userModel'
// 引入角色相关的接口类型
import type {RoleModel, RoleListModel, RolePageListModel, UserRoleListModel} from './model/roleModel'

// 定义枚举类型的接口地址
enum Api {
  // 根据ids 批量删除管理用户
  BatchDeleteUsers = '/admin/acl/user/batchRemove',
  // 根据用户分配角色
  DoAssign = '/admin/acl/user/doAssign',
  // 根据id获取管理用户信息
  GetUserInfoById = '/admin/acl/user/get',
  // 根据id移除管理用户
  DeleteUserById = '/admin/acl/user/remove',
  // 新增管理用户
  SaveUserInfo = '/admin/acl/user/save',
  // 根据用户userId获取角色数据
  ToAssign = '/admin/acl/user/toAssign',
  // 修改管理用户
  UpdateUserInfo = '/admin/acl/user/update',
  // 获取管理用户分页列表
  GetUserPageList = '/admin/acl/user'
}

// 根据ids 批量删除管理用户
export const batchDeleteUsersApi = (ids: string[]) => request.delete<any, null>(Api.BatchDeleteUsers, {data: ids})

// 获取管理用户
export const getUserInfoByIdApi = (id: string) => request.get<any, UserInfoModel>(Api.GetUserInfoById + `/${id}`)
// 删除管理用户
export const deleteUserByIdApi = (id: string) => request.delete<any, null>(Api.DeleteUserById + `/${id}`)
// 新增管理用户
export const saveUserInfoApi = (usrInfo: UserInfoModel) => request.post<any, null>(Api.SaveUserInfo, usrInfo)
// 修改管理用户
export const updateUserInfoApi = (usrInfo: UserInfoModel) => request.put<any, null>(Api.UpdateUserInfo, usrInfo)

// 根据用户分配角色
export const doAssignApi = (userId: string, roleId: string) => request.post<any, null>(Api.DoAssign, null,{
  params: {
    userId,
    roleId
  }
})
// 根据用户获取角色数据
export const toAssignApi = (userId: string) => request.get<any, UserRoleListModel>(Api.ToAssign + `/${userId}`)

// 获取管理用户分页列表
export const getUserPageListApi = (page: number, limit: number, searchParams: object) => request.get<any, UserPageListModel>(Api.GetUserPageList + `/${page}/${limit}`, {
  params: searchParams
})

// 新增/修改管理用户
export const saveOrDeleteUserApi = (usrInfo: UserInfoModel) => {
  if (usrInfo.id) {
    return request.put<any, null>(Api.UpdateUserInfo, usrInfo)
  } else {
    return request.post<any, null>(Api.SaveUserInfo, usrInfo)
  }
}


